package com.yl.nettylearning.day01;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author yangl
 * MappedByteBuffer 可以让文件在内存（堆外内存）中直接修改，操作系统不需要拷贝一次
 */
public class MappedByteBufferTest {
    public static void main(String[] args) throws Exception {
        RandomAccessFile randomAccessFile = new RandomAccessFile("test.txt","rw");
        FileChannel channel = randomAccessFile.getChannel();
        /**
         * 参数1：FileChannel.MapMode.READ_WRITE 使用读写模式
         * 参数2：0：可以直接修改的起始位置
         * 参数3：5：映射到内存的大小，即将test.txt的多个字节映射奥内存,最多修改5个字节，下标最大到4
         * 可以直接修改的范围是0-5
         * 实际类型是DirectByteBuffer
         */
        MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        map.put(0, (byte)'Y');
        map.put(3,(byte)'M');
        randomAccessFile.close();
        System.out.println("修改成功");


    }
}
